<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>队列--击鼓传花</title>
</head>
<body>
  <script>
    function Queue (arr) {
      this.arr = arr || []

      Queue.prototype.enqueue = element => {
        this.arr.push(element)
      }
      Queue.prototype.dequeue = () => {
        return this.arr.shift()
      }
      Queue.prototype.front = () => {
        return this.arr[this.arr.length - 1]
      }
      Queue.prototype.isEmpty = () => {
        return this.arr.length === 0
      }
      Queue.prototype.size = () => {
        return this.arr.length
      }
      Queue.prototype.toString = () => {
        return this.arr.join('<--')
      }
    }

    // var queue = new Queue([100, 40, 76, 45, 93, 12])
    // queue.enqueue(100)
    // queue.enqueue(40)
    // queue.enqueue(77)
    // queue.enqueue(86)
    // queue.enqueue(23)
    // alert(queue)
    // queue.dequeue()
    // alert(queue)
    // queue.dequeue()
    // alert(queue)
    // queue.dequeue()
    // alert(queue)
    // queue.enqueue(143)
    // alert(queue)
    // alert(queue.size())
    // alert(queue.isEmpty())
    // 击鼓传花--给一组数据，给一个固定值，拿到固定值的人被淘汰，看最后获胜的是谁
    function passGame(arr, num) {
      var queue = new Queue(arr)
      while (queue.size() > 1) {
        // 数数，不是num的时候，从队列中取出，再重新放入队列
        // 是num的时候，需要将其从队列中移除
        // 最后队列中剩下的那位，就是最后获胜的人
        for (var i = 0; i < num -1; i++) {
          queue.enqueue(queue.dequeue())
        }
        queue.dequeue()
      }
      // alert(queue.size())
      return queue.front()
    }
    var arr = ['zhangsan', 'lisi', 'mawu', 'laoliu', 'tianqi']
    var last = passGame(arr, 5)
    alert('最后获胜的是====== ' + last)
  </script>
</body>
</html>